/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package session;

import java.util.*;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import persistence.Joueur;

/**
 *
 * @author user
 */
@Singleton
public class SalleSession implements SalleSessionLocal {

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
        @javax.persistence.PersistenceContext(unitName="persistenceUnit")
        private EntityManager em ;
        private ArrayList<Joueur> joueurs;

        public SalleSession(){
            joueurs = new ArrayList<Joueur>();
        }
        
        public List<Joueur> verificationJoueur(String pseudo, String mdp){
            Query query =em.createNamedQuery("chercherJoueur").setParameter("pseudo", pseudo).setParameter("mdp", mdp);
            List<Joueur> j = query.getResultList();
            return j;
        }
        
        @Lock(LockType.WRITE)
        public Joueur connexion(String pseudo, String mdp){
            Joueur joueur=null;
            List<Joueur> j =verificationJoueur( pseudo, mdp);
            if(!j.isEmpty()){
                if(j.size()==1){
                    joueurs.add(j.get(0)); 
                    joueur=j.get(0);
                    for(Joueur c : joueurs){
                        System.out.println(c);
                    }
                }              
            }
            return joueur;
        }
        
        @Lock(LockType.WRITE)
        public boolean deconnexion(Joueur j){
            return joueurs.remove(j);
        }
        
        // Les joueurs ne peuvent pas s'incrire en même temps
        @Lock(LockType.WRITE)
        public boolean inscription(String pseudo, String mdp, String mail){
            boolean flag= false;
            Query query =em.createNamedQuery("chercherPseudo").setParameter("pseudo", pseudo);
            List<Joueur> j = query.getResultList();
            if(j.isEmpty()){
                Joueur joueur = new Joueur(pseudo, mdp, mail);
                em.persist(joueur);
                flag=true;
            }
            return flag;
        }
        
            @Lock(LockType.READ)
        public ArrayList<Joueur> getList(){
            return joueurs;
        }
        
}
